using System;
using System.Collections.Generic;
using System.Text;

namespace KLib.Scene
{
    public interface ISceneGraphService
    {
        /// <summary>
        /// Gets a List of Layers contained by the SceneGraph
        /// </summary>
        IList<SceneLayer> Layers { get;}

        /// <summary>
        /// Adds a SceneLayer to the SceneGraph
        /// </summary>
        /// <param name="layer">The Layer to add to the SceneGraph</param>
        void AddLayer(SceneLayer layer);

        /// <summary>
        /// Removes a Layer from the SceneGraph
        /// </summary>
        /// <param name="layer">The SceneLayer to remove</param>
        void RemoveLayer(SceneLayer layer);

        /// <summary>
        /// Adds a SceneNode directly to the SceneGraph. This should only be used for non-visble game objects, such as cameras or managers
        /// </summary>
        /// <param name="node">The SceneNode to add</param>
        void AddNode(SceneNode node);


        /// <summary>
        /// Saves the state of the SceneGraph to a file.
        /// </summary>
        /// <param name="fileName"></param>
        void Save(string fileName);

        event SceneGraph.SceneNodeEventArgs NodeAdded;
        event SceneGraph.SceneNodeEventArgs NodeRemoved;
        event SceneGraph.SceneLayerEventArgs LayerAdded;
        event SceneGraph.SceneLayerEventArgs LayerRemoved;
    }
}
